package sv.com.renacempleo.dao.ciuo;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;

import sv.com.renacempleo.dao.BaseDaoImpl;
import sv.com.renacempleo.dto.ciuo.Ocupaciones;
import sv.com.renacempleo.exception.WebException;

public class OcupacionesDaoImpl extends BaseDaoImpl implements OcupacionesDao{

	@SuppressWarnings("unchecked")
	@Override
	public List<Object[]> findAllAsArray() throws WebException {
		DetachedCriteria criteria = DetachedCriteria.forClass(Ocupaciones.class);
		criteria.createAlias("ciuo04", "ciuo04");
		criteria.addOrder(Order.asc("ocupacionCodigo"));
		criteria.setProjection(Projections.projectionList().
			add(Projections.property("ocupacionCodigo")).
			add(Projections.property("ciuo04.ciuo04Nombre"))
		);
		return (List<Object[]>) findByCriteria(criteria);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Object[]> findAllByCIUO04(String ciuo01Codigo, String ciuo02Codigo, String ciuo03Codigo, String ciuo04Codigo) throws WebException {
		DetachedCriteria criteria = DetachedCriteria.forClass(Ocupaciones.class);
		criteria.addOrder(Order.asc("ocupacionCodigo"));
		criteria.createAlias("ciuo01", "ciuo01");
		criteria.createAlias("ciuo02", "ciuo02");
		criteria.createAlias("ciuo03", "ciuo03");
		criteria.createAlias("ciuo04", "ciuo04");
		criteria.add(Restrictions.eq("ciuo01.ciuo01Codigo", ciuo01Codigo));
		criteria.add(Restrictions.eq("ciuo02.ciuo02Codigo", ciuo02Codigo));
		criteria.add(Restrictions.eq("ciuo03.ciuo03Codigo", ciuo03Codigo));
		criteria.add(Restrictions.eq("ciuo04.ciuo04Codigo", ciuo04Codigo));
		criteria.setProjection(Projections.projectionList().
			add(Projections.property("ciuo01.ciuo01Codigo")).
			add(Projections.property("ciuo02.ciuo02Codigo")).
			add(Projections.property("ciuo03.ciuo03Codigo")).
			add(Projections.property("ciuo04.ciuo04Codigo")).
			add(Projections.property("ocupacionCodigo")).
			add(Projections.property("ocupacionNombre"))
		);
		return (List<Object[]>) findByCriteria(criteria);
	}

	@SuppressWarnings("unchecked")
	@Override
	public void delete(String ciuo01Codigo, String ciuo02Codigo,
			String ciuo03Codigo, String ciuo04Codigo, Long ocupacionCodigo)
			throws WebException {
		DetachedCriteria criteria = DetachedCriteria.forClass(Ocupaciones.class);
		criteria.addOrder(Order.asc("ocupacionCodigo"));
		criteria.createAlias("ciuo01", "ciuo01");
		criteria.createAlias("ciuo02", "ciuo02");
		criteria.createAlias("ciuo03", "ciuo03");
		criteria.createAlias("ciuo04", "ciuo04");
		criteria.add(Restrictions.eq("ciuo01.ciuo01Codigo", ciuo01Codigo));
		criteria.add(Restrictions.eq("ciuo02.ciuo02Codigo", ciuo02Codigo));
		criteria.add(Restrictions.eq("ciuo03.ciuo03Codigo", ciuo03Codigo));
		criteria.add(Restrictions.eq("ciuo04.ciuo04Codigo", ciuo04Codigo));
		criteria.add(Restrictions.eq("ocupacionCodigo", ocupacionCodigo));
		
		List <Ocupaciones> lsOcupacion = new ArrayList<Ocupaciones>();
		lsOcupacion = (List<Ocupaciones>) findByCriteria(criteria);
		
		if(lsOcupacion.size()>0)
		{
			deleteAll(findByCriteria(criteria));		
			//deleteAll(findByCriteria(criteria));
		}
		
		
	}

}
